import { createStore, applyMiddleware } from 'redux'
import axios from 'axios'
import thunk from 'redux-thunk'
// import logger from 'redux-logger'

// createStore  创建仓库
// createStore(函数(处理业务逻辑), 初始值, 中间件)

let reducer = (state, { type, list }) => {
    // reducer  函数中有两个参数
    // state  初始数据
    // action  区分如何来进行修改数据

    let NewState = JSON.parse(JSON.stringify(state))

    switch (type) {
        case "ADD":
            NewState.count += 1
            return NewState
        case "DEL":
            NewState.count -= 1
            return NewState
        case "INIT":
            // 不能写异步代码
            NewState.list = list
            return NewState
        default:
            return NewState
    }
}

let initState = {
    count: 100,
    num: 888,
    list: []
}

let store = createStore(reducer, initState, applyMiddleware(thunk))
// redux中的中间件 目的是为了增强dispatch函数  (处理异步)

// 1. 使用完redux-thunk中间件，dispatch函数发生了改变
// 2. 使用完redux-thunk中间件后， dispatch第一个参数可以接收为函数










// 如何得到全局状态中的数据
// getState()  读取的是 reducer函数的返回值

// 如何修改全局状态中的数据
// dispatch中第一个参数必须是一个对象
// 对象中必须有一个type属性
// 只要执行dispatch  会重新再走一遍reducer函数

// store.subscribe  用来进行redux中的数据发生改变的

window.store = store


export default store